************************************* * LISTING 1: * * HORIZONTAL ES FEIN-SCROLLING * IN MASCHINENSPRACHE * * PETER FINZEL 85 ************************************* * * KONSTANTE * BASIS EQU $5000 HSMAX EQU 7 ;MAXIMAL VERSCHIEBUNG FEINSCROLLING ZEILE EQU 256 ;ZEILENLAENGE IN BYTE ZZAHL EQU 10 ;ANZAHL DER ZEILEN AM SCHIRM GRBMAX EQU 233 ;RECHTES ZEILENENDE MOD EQU 7+$50 ;ANTIC MODUS 7, HSCROL UND LMS BASZP EQU $E0 ;BASIS ADRESSE IN ZP TMP1 EQU $E2 ;TEMP VARIABLE * * OPERATING SYSTEM * SDLSTL EQU $0230 ;SCHATTENREG. DISPLAY-LISTADRESSE STICK0 EQU $0278 ;SCHATTENREG. F. JOYSTICK NR. 0 SETVBV EQU $E45C ;ROUTINE F. INTERRUPTVEKOREN XITVBV EQU $E462 ;ABSCHLUSS DES VBI * * HARDWARE * RANDOM EQU $D20A ;ZUFALLSZAHL HSCROL EQU $D404 ;REGISTER HOR.VERSCHIEBUNG * ************************************* * PROGRAMM-EINSPRUNG ************************************* * ORG $A800 ;WIE IMMER IN $A800 * JMP HSINIT ;SPRUNG ZUM MP-ANFANG * ************************************* * DISPLAY-LIST FUER HORIZONTAL * SCROLLENDES 'GRAPHICS 2'-DISPLAY * 10 ZEILEN ANTIC-MODUS 7 ************************************* * DLIST DFB $70,$70,$70 ;3 LEERZEILEN DFB MOD ;ANTIC-BEFEHL LMSADR DFW BASIS ;ADRESSE BILDSPEICHER DFB MOD DFW BASIS+ZEILE DFB MOD DFW BASIS+(ZEILE*2) DFB MOD DFW BASIS+(ZEILE*3) DFB MOD DFW BASIS+(ZEILE*4) DFB MOD DFW BASIS+(ZEILE*5) DFB MOD DFW BASIS+(ZEILE*6) DFB MOD DFW BASIS+(ZEILE*7) DFB MOD DFW BASIS+(ZEILE*8) DFB MOD DFW BASIS+(ZEILE*9) DFB $41 ;ANTIC-JMP-BEFEHL DFW DLIST ;ZUM ANFANG DER DISP.-LIST * ************************************* * INTERNE VARIABLE ************************************* * SHSCR DFB 0 ;SCHATTENREGISTER HSCROL GRBSCR DFB 0 ;ZAEHLER FUER GROBSCROLLING * ************************************* * INITIALISIERUNGSROUTINE ZUM * EINRICHTEN DES * BILDSCHIRMHINTERGRUND ************************************* * HSINIT LDA #BASIS:L STA BASZP LDA #BASIS:H STA BASZP+1 LDY #0 LOOP0 LDA RANDOM AND #%00000111 ;0-7 ASL ASL ASL TAX CLC ADC #8 STA TMP1 LOOP1 LDA MUSTER,X STA (BASZP),Y INC BASZP+1 INX CPX TMP1 BNE LOOP1 LDA #BASIS:H STA BASZP+1 INY BNE LOOP0 * ************************************* * INITIALISIERUNGSROUTINE ZUM * EINRICHTEN DER NEUEN DISP.-LIST * UND DER VBI -ROUTINE * UND DEM BILDSCHIRMHINTERGRUND ************************************* * LDA #0 ;GROBSCROLLING STA GRBSCR ;AUF NULL JSR SETLMS ;UND DISPLAYLIST VORBEREITEN LDA #DLIST:L ;NEUE DISP.-LIST STA SDLSTL ;EINSCHALTEN LDA #DLIST:H STA SDLSTL+1 LDA #0 ;FEIN-SCROLLING IN AUSGANGS- STA HSCROL ;POSITION SETZEN STA SHSCR ;AUCH SCHATTENREGISTER! LDY #HSVBI:L ;SCROLL-ROUTINE IN LDX #HSVBI:H ;DEN VBI EINFUEGEN LDA #7 ;DEFERRED VBI GENUEGT JSR SETVBV ;OHNE KOMMENTAR... ENDLESS JMP ENDLESS * ************************************* * VBI-ROUTINE F. HOR. SCROLLING ************************************* * HSVBI CLD ;6502 RECHNET BINAER LDA STICK0 ;JOYSTICK 0 AND #8 ;NACH RECHTS? BNE TLINKS ;NEIN, VERSUCHE LINKS - > * JSR RECHTS ;BILDSCHIRM NACH RECHTS JMP VBIEND ;FERTIG !===> * TLINKS LDA STICK0 AND #4 ;NACH LINKS GEZOGEN? BNE VBIEND ;NEIN, KEIN SCROLLING! * JSR LINKS ;NACH LINKS SCROLLEN * VBIEND LDA SHSCR ;SCHATTENREGISTER FEINSCROLL STA HSCROL ;IN HARDWAREREG. UEBERTRAGEN JMP XITVBV ;SCHLUSS FUER HEUTE! * ************************************* * UP BILDSCHIRM NACH LINKS ************************************* * LINKS LDA SHSCR ;ZEICHENGRENZE ERREICHT? BNE LNK1 ;NEIN - > * LDA GRBSCR ;WEITERES SCROLLING CMP #GRBMAX ;NACH LINKS MOEGLICH? BCS LNKEND ;NEIN, KEIN SCROLLING -> LNK1 DEC SHSCR ;EIN PIXEL NACH LINKS LDA SHSCR ;REICHT FEINSCROLLING? BPL LNKEND ;JAWOHL, DANN FERTIG * LDA #HSMAX ;FEINVERSCHIEBUNG ZURUECK STA SHSCR INC GRBSCR ;GROBPOSITION WEITER JSR SETLMS ;IN DISPLAYLIST EINTRAGEN LNKEND RTS * ************************************* * UP BILDSCHIRM NACH RECHTS ************************************* * RECHTS LDA SHSCR ;ZEICHENGRENZE ERREICHT? BNE RHT1 ;NEIN - > * LDA GRBSCR ;RAND ERREICHT? BEQ RHTEND ;JA, KEIN SCROLLING -> RHT1 INC SHSCR ;EIN PIXEL RECHTS LDA SHSCR ;FEINSCROLLING AUSREICHEND? CMP #HSMAX+1 BCC RHTEND * LDA #0 ;FEINSCROLLING STA SHSCR ;RUECKSETZEN DEC GRBSCR ;GROB-POS. ZURUECK JSR SETLMS ;IN DISP.-LIST EINTRAGEN RHTEND RTS * ************************************* * UP EINTRAGEN DER LMS ADRESSE ************************************* * SETLMS LDX #0 ;INDEX IN DISP.-LIST LDA GRBSCR ;GROBSCROLL-POSITION NXTLMS STA LMSADR,X ;IN ZWEITEN BYTE INX ;JEDER ANTIC-ANWEISUNG INX ;EINTRAGEN INX CPX #ZZAHL*3 ;ALLE ZEILEN BEARBEITET? BCC NXTLMS ;NOCH NICHT - > RTS * *************************************** * MUSTERTABELLE FUER ZUFALLSHINTERGRUND *************************************** * MUSTER DFB 0,0,0,0,0,0,0,67 DFB 0,0,0,0,0,0,3,67 DFB 0,0,0,0,0,3,3,67 DFB 0,0,0,0,3,3,3,67 DFB 0,0,0,3,3,3,3,67 DFB 0,0,3,3,3,3,3,67 DFB 0,3,3,3,3,3,3,67 DFB 3,3,3,3,3,3,3,67